const mongoose = require('mongoose');
const app = require('./app');
const config = require('./config/config');
const logger = require('./config/logger');

// 连接到MongoDB数据库
mongoose.connect(config.mongoose.url, config.mongoose.options).then(() => {
  logger.info('已连接到MongoDB');
}).catch((err) => {
  logger.error('无法连接MongoDB:', err.message);
  process.exit(1);
});

// 监听指定端口
const server = app.listen(config.port, () => {
  logger.info(`服务器正在运行在 ${config.port} 端口`);
  // 触发app的ready事件，启动备份调度器
  app.emit('ready');
});

// 处理未捕获的异常
process.on('uncaughtException', (err) => {
  logger.error('未捕获的异常:', err);
  process.exit(1);
});

// 处理未处理的Promise拒绝
process.on('unhandledRejection', (reason) => {
  logger.error('未处理的Promise拒绝:', reason);
});

// 处理SIGTERM信号
process.on('SIGTERM', () => {
  logger.info('SIGTERM信号接收到');
  // 关闭服务器
  server.close(() => {
    logger.info('服务器已关闭');
    // 关闭数据库连接
    mongoose.connection.close(false).then(() => {
      logger.info('MongoDB连接已关闭');
      process.exit(0);
    }).catch((err) => {
      logger.error('关闭MongoDB连接失败:', err);
      process.exit(1);
    });
  });
}); 